<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>uupaa-virtualtimer.js - Reference</title>
<style type="text/css">@import url(./README.css);</style>
</head>
<body>
<p>
   | <a href="http://code.google.com/p/uupaa-js-spinoff/">Project Home(Google Code)</a>
   | <a href="./README.htm">README</a>
   | <a href="./DEMO.htm">DEMO</a>
   | <a href="./CLASS.htm">Reference</a> |<br />
   | <a href="./CHANGELOG.htm">ChangeLog</a>
   | <a href="./LICENSE.htm">License</a>
   |
</p>

<hr />
|
<a href="#uuClass.VirtualTimer">uuClass.VirtualTimer</a> |

<hr />
<h2><a name="uuClass.VirtualTimer">VirtualTimer</a> - 仮想タイマー</h2>
<p>uuClass.VirtualTimer は JavaScript 標準のタイマー関数(setTimeout, setInterval)を、よりリッチにしたソフトウェアタイマーです。</p>
<p>タイマーの精度は setTimeout と同等です。連続使用によるオーバーフローや劣化はありません。</p>
<hr />
<dl>
  <dt><a name="uu.vtm">uu.vtm</a> - uuClass.VirtualTimer factory</dt>
  <dd><p>uu.vtm() は
      new uuClass.VirtualTimer() を実行するファクトリです。</p>
  </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.construct">uuClass.VirtualTimer.construct </a> - create VirtualTimer - 仮想タイマーを生成</dt>
      <dd><p>uuClass.VirtualTimer.construct () は 仮想タイマーを生成します。</p>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.set">uuClass.VirtualTimer.set</a> - regist VirtualTimer - 仮想タイマーを登録</dt>
      <dd><p>uuClass.VirtualTimer.set(<i>fn</i>, <i>delay</i>,
          <i>loop</i> = -1, <i>title</i> = "-", <i>me</i> = undefined) は、
          仮想タイマーを登録します。</p>
<pre>
@param Function   fn      - 遅延評価関数を指定します。
@param Number     delay   - 遅延時間を10以上の数値 または 関数で指定します。数値の単位は ms です。
       /Function
@param Number     [loop]  - ループ回数を指定します。-1なら無限ループ、1以上の値なら有限ループとなります。
                            0ならループ数ゼロで終了済みの状態の仮想タイマーを生成します。
                            デフォルトは -1(無限ループ) です。
@param String     [title] - タイトルを指定します。title は <i>delay</i>() の第二引数に渡されます。
                            <i>delay</i> 関数をいくつかのタイマーが共用している場合などは、
                            title を適切に設定することでタイマーの判別が可能になります。
                            適切な名前を設定しておくことでデバッグがしやすくなる効果もあります。
@param this       [me]    - fn 呼び出し時の this オブジェクトを指定します。デフォルトは undefined です。
@return Number            - 登録成功で、仮想タイマーID(<i>vtid</i>)を返します。
                            登録失敗で -2 を返します。

                            登録成功時に返される値の最小値はブラウザに依存します。
                            Safari や Chrome は 0、その他のブラウザは 1 から始まります。
</pre>
          <p><b>有限または無限ループを選択可能</b>: <i>loop</i> が -1 なら無限ループ, 1以上なら有限ループ, 0 なら終了状態の有限ループ(機能しないが登録されている状態)になります。
          <br />有限ループの仮想タイマーは、<i>delay</i> 時間経過後に <i>fn</i> を呼び出す一連の動作を <i>loop</i> 回繰り返し、
                ループ残数がゼロになるとループを終了します。<i>loop</i> が100なら100回ループします。
          <br />無限ループの仮想タイマーは、<i>delay</i> 時間経過後に <i>fn</i> を呼び出す一連の動作を無限に続けます。</p>
          <p><b>delay時間を関数で指定可能</b>: <i>delay</i> には ms 単位の数値か関数を指定可能です。
          <br /><i>delay</i> が関数なら、次回の遅延時間を決める際に <i>delay</i>(呼び出し回数, title) の形で呼び出します。
          <br /><i>delay</i> 関数の戻り値が遅延時間になります。
          <br />マイナスの値を返すと、ループ残数をゼロにしてループを終了します(この場合は無限ループも終了します)。
          <br />呼び出し回数の値は0から始まります。
          <br /><i>delay</i> 関数の初回の呼び出し( delay(0, <i>title</i>) )がマイナスの値を返すと、登録に失敗し -2 を返します。</p>

          <p><b>仮想タイマー追加で自動リスタート</b>: 仮想タイマーの登録に成功すると、一時停止状態のベースタイマーは自動的に resume(リスタート)します。</p>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.unset">uuClass.VirtualTimer.unset</a> - unregist VirtualTimer - 仮想タイマーを抹消</dt>
      <dd><p>uuClass.VirtualTimer.unset(<i>vtid</i>) は
          仮想タイマー(<i>vtid</i>)を強制終了し、リソース開放可能(削除済み)としてマーキングします。</p>
          <p>unset 実行済みの vtid は無効になり、resume や extend は機能しなくなります。</p>
<pre>
@param Number  vtid - <a href="#uuClass.VirtualTimer.set">uuClass.VirtualTimer.set</a> が返す vtid を指定します。
</pre>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.extend">uuClass.VirtualTimer.extend</a> - extend loop count - ループ数を延長</dt>
      <dd><p>uuClass.VirtualTimer.extend(<i>vtid</i>, <i>loop</i> = -1) は、
          仮想タイマー(<i>vtid</i>)の現在のループ数を +<i>loop</i> します。</p>
          <p>また、以下の機能を持ちます</p>
          <ul>
             <li>有限ループに対し <i>loop</i> = -1 を指定すると、有限ループが無限ループに変化します。</li>
             <li>無限ループに対し <i>loop</i> = 1以上の値 を指定すると、無限ループが有限ループに変化します。</li>
             <li>有限/無限ループに対し、<i>loop</i> = 0 を指定すると、残り回数がゼロ(終了状態)の有限ループに変化します。</li>
          </ul>
          <p>仮想タイマー(<i>vtid</i>)の状態が "ループ終了後" か "一時停止中" なら、
              ループ数を再設定し、自動的に resume(リスタート)します。</p>
          <p>ベースタイマーが一時停止中の場合も自動的に resume(リスタート)します。</p>
<pre>
@param Number  vtid   - <a href="#uuClass.VirtualTimer.set">uuClass.VirtualTimer.set</a> が返す vtid を指定します。
@param Number  [loop] - 延長するループ数の指定です。-1, 0, 1以上の値を指定します。デフォルトは -1 です。
</pre>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.resume">uuClass.VirtualTimer.resume</a> - resume - リスタート</dt>
      <dd><p>uuClass.VirtualTimer.resume(<i>vtid</i> = -1) は、
            一時停止している ベースタイマー または 仮想タイマーをリスタートします。</p>
          <p>ベースタイマーが停止している状態で仮想タイマーをリスタートさせると、ベースタイマーも自動的にリスタートします。</p>
<pre>
@param Number  [vtid] - vtid を指定すると仮想タイマーをリスタートします。
                        -1を指定するとベースタイマーをリスタートします。
                        デフォルトは-1です。
</pre>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.suspend">uuClass.VirtualTimer.suspend</a> - suspend - 一時停止</dt>
      <dd><p>uuClass.VirtualTimer.suspend(<i>vtid</i> = -1) は、
          動作中の ベースタイマー または 仮想タイマーを一時停止します。</p>
          <p>ベースタイマーを停止すると、ベースタイマー上で動作している仮想タイマーも全て停止します。</p>
<pre>
@param Number  [vtid] - vtid を指定すると仮想タイマーを一時停止します。
                        -1を指定するとベースタイマーを一時停止します。
                        デフォルトは-1です。
</pre>
      </dd>
<!-- -->
      <dt><a name="uuClass.VirtualTimer.diet">uuClass.VirtualTimer.diet</a> - memory compaction - リソースを開放</dt>
      <dd><p>uuClass.VirtualTimer.diet() は、
          ループ回数が上限に達しているか、<a href="#uuClass.VirtualTimer.unset">uuClass.VirtualTimer.unset</a> で登録抹消済みの仮想タイマーのリソースを開放します。</p>
          <p>一時停止中であっても、ループ数が残っている仮想タイマーのリソースは開放されません。</p>
      </dd>

<!-- -->
      <dt><a name="uuClass.VirtualTimer.state">uuClass.VirtualTimer.state</a> - get VirtualTimer state - 仮想タイマーの状態を取得</dt>
      <dd><p>uuClass.VirtualTimer.state(<i>vtid</i>) は、
          <i>vtid</i> で指定された仮想タイマーの状態を返します。</p>
<pre>
@param Number  vtid                - vtid を指定します。
@return uuConst.VirtualTimer.State - 仮想タイマーの状態を返します。
</pre>
      <table>
      <tr><th>return<br /><span lang="ja">戻り値</span></th><th>state<br /><span lang="ja">状態</span></th></tr>
      <tr><td>uuConst.VirtualTimer.State.UNKNOWN</td><td>不明な状態</td></tr>
      <tr><td>uuConst.VirtualTimer.State.RUNNING</td><td>ループ実行中</td></tr>
      <tr><td>uuConst.VirtualTimer.State.LOOPOUT</td><td>ループアウト(停止中)</td></tr>
      <tr><td>uuConst.VirtualTimer.State.SUSPEND</td><td>一時停止中</td></tr>
      <tr><td>uuConst.VirtualTimer.State.UNSETED</td><td>unset実行済み(停止中, リソース開放待ち)</td></tr>
      </table>
          <table>
          <tr><th>VirtualTimer kind<br /><span lang="ja">仮想タイマー種別</span></th>
              <th><a href="#uuClass.VirtualTimer.state">state()</a> result<br /><span lang="ja">戻り値</span></th>
              <th>詳細</th>
              <th><a href="#uuClass.VirtualTimer.diet">diet</a>で<br />リソースが<br />開放されるか</th>
              <th><a href="#uuClass.VirtualTimer.suspend">suspend</a>が<br />機能するか</th>
              <th><a href="#uuClass.VirtualTimer.resume">resume</a>が<br />機能するか</th>
              <th><a href="#uuClass.VirtualTimer.extend">extend</a>が<br />機能するか</th>
              <th>内部的な状態</th></tr>
          <tr><td>有限ループ</td><td>RUNNING</td><td>ループ実行中</td><td>×(されない)</td><td>○(する)</td><td>×(しない)</td><td>○(する)</td><td>loop=n,next>0,unset=0</td></tr>
          <tr><td>有限ループ</td><td>LOOPOUT</td><td>ループアウト(ループ残なし)</td><td>○(される)</td><td>×(しない)</td><td>×</td><td>○</td><td>loop=0,next=0,unset=0</td></tr>
          <tr><td>有限ループ</td><td>SUSPEND</td><td>一時停止中(ループ残あり)</td><td>×</td><td>×</td><td>○(する)</td><td>○</td><td>loop=n,next=0,unset=0</td></tr>
          <tr><td>有限ループ</td><td>UNSETED</td><td>unset実行済み</td><td>○</td><td>×</td><td>×</td><td>×(しない)</td><td>loop=0,next=0,unset=1</td></tr>
          <tr><td>無限ループ</td><td>RUNNING</td><td>ループ実行中</td><td>×</td><td>○</td><td>×</td><td>○</td><td>loop=-1,next>0,unset=0</td></tr>
          <tr><td>無限ループ</td><td>LOOPOUT</td><td>ループアウト<br />(delay()が負の値を返した)</td><td>○</td><td>×</td><td>×</td><td>○</td><td>loop=0,next=0,unset=0</td></tr>
          <tr><td>無限ループ</td><td>SUSPEND</td><td>一時停止中</td><td>×</td><td>×</td><td>○</td><td>○</td><td>loop=-1,next=0,unset=0</td></tr>
          <tr><td>無限ループ</td><td>UNSETED</td><td>unset実行済み</td><td>○</td><td>×</td><td>×</td><td>×</td><td>loop=0,next=0,unset=1</td></tr>
          </table>
      </dd>
</dl>

</body>
</html>
